package com.hsp.Demo_11_innerclass;

public class Outter03 {

    private int count = 1;

    public void m1(){
        System.out.println("Outter03的m1()");
    }

    public void m2(){
        //创建匿名内部类
        /*
            其实在底层虚拟机会给这AA(){} 创建相应的类去实现AA接口
            例如： class XXX implements AA{ 具体的试下，就是匿名内部类中的实现}
                    这个XXX名称为： 外部类名$01
            所以匿名内部类经过了哪些操作：
                1、创建一个匿名内部类以后，虚拟机会创建一个类，去实现该接口，类名为：外部类$01
                2、由于匿名内部类有new， 所以相当于是： new 外部类$01
                3、并将该对象赋给了： aa

         */
            AA aa = new AA(){
                @Override
                public void cry() {
                    System.out.println("小老虎，呜呜呜~~");
                }
            };

            aa.cry();
        System.out.println("aa的运行类型：" + aa.getClass());
        //返回：aa的运行类型：class com.hsp.Demo_11_innerclass.Outter03$1
    }

    public static void main(String[] args) {
        Outter03 outter03 = new Outter03();
        outter03.m2();
    }
}

interface AA{

    void cry();
}